library(caret)Loading required package: lattice
Loading required package: ggplot2
library(traineR)
Attaching package: 'traineR'
The following object is masked from 'package:caret':
contr.dummy
setwd("~/Google Drive/MDCurso/Datos")
datos <- read.csv("iris.csv", sep = ";", dec='.', header = T , stringsAsFactors = TRUE)
# Equilibrio de la variable a predecir
prediction.variable.balance(datos,"tipo")# Vamos a generar al azar una tabla de testing de con el 30% de los datos y una tabla de aprendizaje del 70%
tam <- dim(datos)
n <- tam[1]
muestra <- sample(1:n, floor(n*0.30))
ttesting <- datos[muestra,]
taprendizaje <- datos[-muestra,]
modelo <- train.nnet(formula = tipo~.,data = taprendizaje, size = 4)# weights: 35
initial value 143.818914
iter 10 value 55.099069
iter 20 value 47.131962
iter 30 value 19.516679
iter 40 value 5.756881
iter 50 value 4.753205
iter 60 value 4.541411
iter 70 value 4.540975
iter 80 value 4.540924
final value 4.540924
converged
prediccion <- predict(modelo, ttesting, type = "class")
head(prediccion$prediction)[1] versicolor virginica setosa setosa setosa virginica
Levels: setosa versicolor virginica
MC <- confusion.matrix(ttesting, prediccion)
# Índices de Calidad de la predicción
general.indexes(mc = MC)
Confusion Matrix:
prediction
real setosa versicolor virginica
setosa 13 0 0
versicolor 0 15 1
virginica 0 0 16
Overall Accuracy: 0.9778
Overall Error: 0.0222
Category Accuracy:
setosa versicolor virginica
1.000000 0.937500 1.000000
# Igualmente se pueden usar todos los parámetros
modelo <- train.nnet(tipo~p.largo+p.ancho,
data = taprendizaje,
size = 4,
rang = 0.1,
decay = 5e-4,
maxit = 200,
MaxNWts = 500,
trace = FALSE)
prediccion <- predict(modelo, ttesting, type = "class")
head(prediccion$prediction)[1] versicolor virginica setosa setosa setosa virginica
Levels: setosa versicolor virginica
MC <- confusion.matrix(ttesting,prediccion)
# Índices de Calidad de la predicción
general.indexes(mc = MC)
Confusion Matrix:
prediction
real setosa versicolor virginica
setosa 13 0 0
versicolor 0 16 0
virginica 0 0 16
Overall Accuracy: 1.0000
Overall Error: 0.0000
Category Accuracy:
setosa versicolor virginica
1.000000 1.000000 1.000000
setwd("~/Google Drive/MDCurso/Datos")
datos <- read.csv("MuestraCredito5000V2.csv", sep = ";", header = T, stringsAsFactors = TRUE)
# Equilibrio de la variable a predecir
prediction.variable.balance(datos,"BuenPagador")# Recodifica las variables como categóricas ordinales
datos$IngresoNeto <- factor(datos$IngresoNeto,ordered = TRUE)
datos$CoefCreditoAvaluo <- factor(datos$CoefCreditoAvaluo,ordered = TRUE)
str(datos)'data.frame': 5000 obs. of 6 variables:
$ MontoCredito : int 14327 111404 21128 15426 10351 27060 243369 16300 18319 107037 ...
$ IngresoNeto : Ord.factor w/ 2 levels "1"<"2": 1 1 1 2 1 1 1 2 2 2 ...
$ CoefCreditoAvaluo: Ord.factor w/ 12 levels "1"<"2"<"3"<"4"<..: 1 1 1 1 1 1 1 1 1 1 ...
$ MontoCuota : Factor w/ 4 levels "Alto","Bajo",..: 4 4 4 4 4 4 4 4 4 4 ...
$ GradoAcademico : Factor w/ 2 levels "Bachiller","Licenciatura": 1 1 1 1 1 1 1 1 1 1 ...
$ BuenPagador : Factor w/ 2 levels "No","Si": 2 2 2 2 2 2 2 2 2 2 ...
# Usamos createDataPartition del paquete caret para generar las particiones training-testing
# y: vector de datos, se le pasa la variable a predecir para que trate de equilibrar las distribuciones en las muestras respecto a los niveles de esta variable
# p: es el porcentaje para training
# list: F para que devuelva un array en lugar de una lista
# Vamos a generar una tabla de testing con el 15% de los datos y una tabla de aprendizaje del 85%.
muestra <- createDataPartition(y = datos$BuenPagador, p = 0.85, list = F)
taprendizaje <- datos[muestra, ]
ttesting <- datos[-muestra, ]
modelo <- train.nnet(formula = BuenPagador~.,
data = taprendizaje,
size = 200,
MaxNWts = 5000,
rang = 0.1,
decay = 5e-4,
maxit = 200,
trace = FALSE)
prediccion <- predict(modelo, ttesting, type = "class")
head(prediccion$prediction)[1] Si Si Si Si Si Si
Levels: No Si
MC <- confusion.matrix(ttesting, prediccion)
# Índices de Calidad de la predicción
general.indexes(mc = MC)
Confusion Matrix:
prediction
real No Si
No 0 105
Si 0 644
Overall Accuracy: 0.8598
Overall Error: 0.1402
Category Accuracy:
No Si
0.000000 1.000000
# Poder predictivo variables númericas y categóricas
numerical.predictive.power(datos, "BuenPagador","MontoCredito")categorical.predictive.power(datos,"BuenPagador", "CoefCreditoAvaluo")categorical.predictive.power(datos,"BuenPagador", "MontoCuota")categorical.predictive.power(datos,"BuenPagador", "GradoAcademico")categorical.predictive.power(datos,"BuenPagador", "IngresoNeto")modelo <- train.nnet(formula = BuenPagador~CoefCreditoAvaluo + MontoCuota + IngresoNeto,
data = taprendizaje,
size = 200,
MaxNWts = 5000,
rang = 0.1,
decay = 5e-4,
maxit = 200,
trace = FALSE)
prediccion <- predict(modelo, ttesting, type = "class")
head(prediccion$prediction)[1] Si Si Si Si Si Si
Levels: No Si
MC <- confusion.matrix(ttesting, prediccion)
# Índices de Calidad de la predicción
general.indexes(mc = MC)
Confusion Matrix:
prediction
real No Si
No 16 89
Si 11 633
Overall Accuracy: 0.8665
Overall Error: 0.1335
Category Accuracy:
No Si
0.152381 0.982919
modelo <- train.neuralnet(formula = BuenPagador~. ,
data = taprendizaje,
hidden = c(6, 4, 3),
linear.output = FALSE,
threshold = 0.1,
stepmax = 1e+06)
prediccion <- predict(modelo, ttesting, type = "class")
head(prediccion$prediction)## [1] Si Si Si Si Si Si
## Levels: No Si
MC <- confusion.matrix(ttesting, prediccion)
# Índices de Calidad de la predicción
general.indexes(mc = MC)##
## Confusion Matrix:
## prediction
## real No Si
## No 0 105
## Si 0 644
##
## Overall Accuracy: 0.8598
## Overall Error: 0.1402
##
## Category Accuracy:
##
## No Si
## 0.000000 1.000000
# Plot de la red. rep = "best" grafica la mejor repetición según el parámetro rep en neuralnet
plot(modelo, rep = "best")modelo <- train.neuralnet(formula = BuenPagador~CoefCreditoAvaluo + MontoCuota ,
data = taprendizaje,
hidden = c(6, 4, 3),
linear.output = FALSE,
threshold = 0.1,
stepmax = 1e+06)
prediccion <- predict(modelo, ttesting, type = "class")
head(prediccion$prediction)## [1] Si Si Si Si Si Si
## Levels: No Si
MC <- confusion.matrix(ttesting, prediccion)
# Índices de Calidad de la predicción
general.indexes(mc = MC)##
## Confusion Matrix:
## prediction
## real No Si
## No 11 94
## Si 7 637
##
## Overall Accuracy: 0.8652
## Overall Error: 0.1348
##
## Category Accuracy:
##
## No Si
## 0.104762 0.989130
# Plot de la red. rep = "best" grafica la mejor repetición según el parámetro rep en neuralnet
plot(modelo, rep = "best")